# Создание заказа

Теперь у нас есть полноценная регистрация и авторизация и мы можем приступить к оформлению заказа.


Для этого необходимо создать модель заказа и реализовать создание заказа и получения списка заказов 
текущего пользователя.

Поскольку проект учебный достаточно создать заказ, дополнительных проверок на наличие товара на 
складе делать нет необходимости. В реальной жизни скорее всего потребуется реализовать интеграцию с 
какой-либо системой учета товаров, но при правильной архитектуре проекта проблем с этим возникнуть 
не должно.

Итак, что необходимо сделать:

1. Описать модель данных для заказа в `models/Order.js`. Она должна содержать следующие поля: 
    * `user` - идентификатор пользователя, который совершил заказ
        - ObjectId
        - обязательное
        - `ref`: `User` 
    * `product` - идентификатор заказанного товара
        - ObjectId
        - обязательное
        - `ref`: `Product`
    * `phone` - телефон пользователя
        - строковое
        - обязательное
        - удовлетворяет регулярному выражению `/\+?\d{6,14}/`, в случае несоответствия - должна 
        бросаться ошибка валидации с текстом `Неверный формат номера телефона.`
    * `address` - адрес доставки
        - строковое
        - обязательное
   
2. В контроллере `controllers/orders.js` реализовать функцию `checkout` для создания заказа. В 
случае, если при создании заказа возникает ошибка валидации - необходимо вернуть ответ со статусом 
400 и описанием того, какие поля не прошли валидацию. 
Если же создание заказа прошло успешно - на почту пльзователю необходимо отправить письмо с 
подтверждением заказа. Для этого необходимо использовать уже знакомую вам функцию `sendMail`, куда
в качестве названия шаблона нужно передать `order-confirmation` и данные заказа - id и название 
заказанного продукта.

3. В контроллере реализовать функцию `getOrdersList` для получения списка заказов **только** текущего 
пользователя. С сервера должен возвращаться объект с ключом `orders`, в котором находится массив 
заказов, где каждый заказ содержит следующие поля:
```js
{
    id: ObjectId,
    user: ObjectId,
    product: {
      id: ObjectId,
      title: 'title',
      images: ['image'],
      category: ObjectId,
      subcategory: ObjectId,
      price: 4500,
      description: 'description',
    },
    phone: '+79001231231',
    address: 'address',
  }
``` 

4. Оба метода должны быть доступны только для авторизированных пользователей.


*Подсказка: middleware для работы с ошибками валидации уже есть, его необходимо только подключить.*
